import { Controller, Get, Put, Delete, Param, Body, Query, Post, Patch } from '@nestjs/common';
import { CommentService } from './comment.service';
import { Comment } from '../../entities/comment.entity';
import { Admin } from '../../common/decorators/admin.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiBody, ApiParam, ApiQuery } from '@nestjs/swagger';

@ApiTags('评论管理（管理员）')
@Controller('api/admin/comments')
export class CommentAdminController {
  constructor(
    private readonly commentService: CommentService,
  ) {}

  // 获取所有评论（管理员）
  @Admin()
  @Get()
  @ApiOperation({
    summary: '获取所有评论',
    description: '管理员获取系统中的所有评论，支持分页和筛选',
  })
  @ApiQuery({
    name: 'page',
    description: '页码',
    example: 1,
    required: false,
  })
  @ApiQuery({
    name: 'pageSize',
    description: '每页数量',
    example: 10,
    required: false,
  })
  @ApiQuery({
    name: 'articleId',
    description: '文章ID（可选）',
    required: false,
  })
  @ApiQuery({
    name: 'status',
    description: '评论状态（可选：0禁用，1启用）',
    required: false,
  })
  @ApiQuery({
    name: 'keyword',
    description: '搜索关键词（可选）',
    required: false,
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Comment],
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  findAllAdmin(
    @Query('page') page: number = 1,
    @Query('pageSize') pageSize: number = 10,
    @Query('articleId') articleId?: number,
    @Query('status') status?: number,
    @Query('keyword') keyword?: string,
  ) {
    return this.commentService.findAll(page, pageSize, articleId, status, keyword);
  }

  // 获取评论详情（管理员）
  @Admin()
  @Get(':id')
  @ApiOperation({
    summary: '获取评论详情',
    description: '管理员获取指定评论的详细信息',
  })
  @ApiParam({
    name: 'id',
    description: '评论ID',
    example: '1',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: Comment,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '评论不存在',
  })
  findOneAdmin(@Param('id') id: number) {
    return this.commentService.findOne(id);
  }

  // 更新评论状态（管理员）
  @Admin()
  @Patch(':id/status')
  @ApiOperation({
    summary: '更新评论状态',
    description: '管理员更新评论状态（启用/禁用/审核）',
  })
  @ApiParam({
    name: 'id',
    description: '评论id',
    example: '1',
  })
  @ApiBody({
    schema: {
      example: {
        isActive: 1, // 0禁用，1启用
      },
    },
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '评论不存在',
  })
  updateStatus(@Param('id') id: number, @Body('isActive') isActive: number) {
    return this.commentService.updateStatus(id, isActive);
  }

  // 更新评论内容（管理员）
  @Admin()
  @Put(':id')
  @ApiOperation({
    summary: '更新评论内容',
    description: '管理员更新评论内容',
  })
  @ApiParam({
    name: 'id',
    description: '评论ID',
    example: '1',
  })
  @ApiBody({
    schema: {
      example: {
        content: '更新后的评论内容',
      },
    },
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '评论不存在',
  })
  updateContent(@Param('id') id: number, @Body('content') content: string) {
    return this.commentService.updateContentByAdmin(id, content);
  }



  // 删除评论（管理员）
  @Admin()
  @Delete(':id')
  @ApiOperation({
    summary: '删除评论',
    description: '管理员删除指定评论',
  })
  @ApiParam({
    name: 'id',
    description: '评论ID',
    example: '1',
  })
  @ApiResponse({
    status: 200,
    description: '删除成功',
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '评论不存在',
  })
  remove(@Param('id') id: number) {
    return this.commentService.removeAdmin(id);
  }

  // 获取评论统计数据
  // @Admin()
  // @Get('stats')
  // @ApiOperation({
  //   summary: '获取评论统计',
  //   description: '获取评论相关统计数据',
  // })
  // @ApiResponse({
  //   status: 200,
  //   description: '获取成功',
  // })
  // @ApiResponse({
  //   status: 403,
  //   description: '无管理员权限',
  // })
  // getStats() {
  //   return this.commentService.getStats();
  // }

}